package com.hefu.virtuallife;

import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

import com.dz.utlis.JavaUtils;
import com.fei.root.common.MultiApplication;
import com.hefu.virtuallife.bean.DaoMaster;
import com.hefu.virtuallife.bean.DaoSession;
import com.hefu.virtuallife.interfaces.ActivityLifecycleCallbackWatcher;
import com.hefu.virtuallife.utils.CrashHandler;
import com.hefu.virtuallife.utils.SmartDataUtils;
import com.yanzhenjie.nohttp.InitializationConfig;
import com.yanzhenjie.nohttp.Logger;
import com.yanzhenjie.nohttp.NoHttp;
import com.yanzhenjie.nohttp.URLConnectionNetworkExecutor;
import com.yanzhenjie.nohttp.cache.DBCacheStore;
import com.yanzhenjie.nohttp.cookie.DBCookieStore;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by zc on 2018/7/1.
 */

public class App extends MultiApplication {
    private static Context mContext;
    private static App instances;
    private static DaoSession daoSession = null;
    private static List<Activity> activities = new ArrayList<>();

    @Override
    public void onCreate() {
        super.onCreate();
        instances = this;
        init(this);
        mContext = this;
        CrashHandler.getInstance().init(this);
        setupDatabase();
        initHttp();
        watchActivity();
        JavaUtils.isdebug = true;
    }

    private void setupDatabase() {
        //创建数据库.db"
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "ai_smart.db", null);
        //获取可写数据库
        SQLiteDatabase db = helper.getWritableDatabase();
        //获取数据库对象
        DaoMaster daoMaster = new DaoMaster(db);
        //获取Dao对象管理者
        daoSession = daoMaster.newSession();
        SmartDataUtils.fillData();

    }

    public static DaoSession getDaoIns() {
        return daoSession;
    }

    public static Context getContext() {
        return mContext;
    }

    public static App get() {
        return instances;
    }
    //监听activity注册和退出
    private void watchActivity() {
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbackWatcher() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                activities.add(activity);
            }

            @Override
            public void onActivityDestroyed(Activity activity) {
                activities.remove(activity);
            }
        });
    }

    //初始化网络框架
    private void initHttp() {
        Logger.setDebug(BuildConfig.DEBUG);// 开启NoHttp的调试模式, 配置后可看到请求过程、日志和错误信息。
        Logger.setTag("hefuhttp");// 设置NoHttp打印Log的tag。
        // 一般情况下你只需要这样初始化：
        //    NoHttp.initialize(this);
        //  Headers.HEAD_VALUE_CONTENT_TYPE_OCTET_STREAM
        // 如果你需要自定义配置：
        NoHttp.initialize(InitializationConfig.newBuilder(this)
                // 设置全局连接超时时间，单位毫秒，默认10s。
                .connectionTimeout(30 * 1000)
                // 设置全局服务器响应超时时间，单位毫秒，默认10s。
                .readTimeout(30 * 1000)
                // 配置缓存，默认保存数据库DBCacheStore，保存到SD卡使用DiskCacheStore。
                .cacheStore(
                        new DBCacheStore(this).setEnable(true) // 如果不使用缓存，设置setEnable(false)禁用。
                )
                // 配置Cookie，默认保存数据库DBCookieStore，开发者可以自己实现。
                .cookieStore(
                        new DBCookieStore(this).setEnable(true) // 如果不维护cookie，设置false禁用。
                )
                // 配置网络层，URLConnectionNetworkExecutor，如果想用OkHttp：OkHttpNetworkExecutor。
                .networkExecutor(new URLConnectionNetworkExecutor())
                .build()
        );


    }
}
